package com.tarena.emqx.config;

import com.tarena.emqx.consumer.MyConsumer;
import lombok.extern.slf4j.Slf4j;
import org.eclipse.paho.client.mqttv3.MqttClient;
import org.eclipse.paho.client.mqttv3.MqttConnectOptions;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
@Slf4j
public class EmqxClientConfiguration {
    //在项目启动的时候 需要一个java客户端代码连接localhost:1883//底层tcp-ip协议端口
    @Bean
    public MqttClient mqttClient() throws Exception{
        //通过链接地址和客户端id 和emqx进行连接
        String address="tcp://localhost:1883";
        //客户端id表示业务名称 和唯一性
        String clientId="emqx-consumer-client"+System.currentTimeMillis();
        MqttClient mqttClient=new MqttClient(address,clientId);
        //连接emqx对象不能只有地址 还有其他属性需要客户端连接的时候使用
        MqttConnectOptions options=new MqttConnectOptions();
        //设置用户名 admin
        options.setUserName("admin");
        //设置密码 1qazxsw2
        options.setPassword("1qazxsw2".toCharArray());
        //设置是否自动重连
        options.setAutomaticReconnect(true);
        //软件版本号 版本号保证不冲突即可
        options.setMqttVersion(4);
        //清理会话 每次清理防止 数据冲突
        options.setCleanSession(true);
        //TODO 如果是消费者 需要设置消费消费监听对象
        MyConsumer myConsumer=new MyConsumer(mqttClient);
        mqttClient.setCallback(myConsumer);
        //基于上述配置的选项属性 进行连接 阻塞式连接
        mqttClient.connect(options);
        return mqttClient;
    }

}
